package br.com.toscano.contpedido.view;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

import br.com.toscano.contpedido.business.LicencaBC;
import br.com.toscano.contpedido.business.UsuarioBC;
import br.com.toscano.contpedido.constant.ConstantesMensagem;
import br.com.toscano.contpedido.domain.ContextoUsuario;
import br.com.toscano.contpedido.domain.Funcionalidade;
import br.com.toscano.contpedido.domain.ObjetoAbstrato;
import br.com.toscano.contpedido.domain.Perfil;
import br.gov.frameworkdemoiselle.annotation.NextView;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.template.AbstractPageBean;
import br.gov.frameworkdemoiselle.util.ResourceBundle;

@ViewController
@PreviousView("./licenca_edit.jsf")
@NextView("./index.jsf")
public class LoginMB extends AbstractPageBean {

	private static final long serialVersionUID = 1L;

	private String login;
	private String senha;

	@Inject
	private UsuarioBC usuarioBC;

	@Inject
	private LicencaBC licencaBC;

	@Inject
	private ResourceBundle bundle;
	
	@Inject
	private FacesContext facesContext;
	
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String logar() {
		ContextoUsuario usuario = usuarioBC.logar(login, senha);
		if (usuario != null && usuario.getUsuario().getAtivo().equals(ObjetoAbstrato.SIM)) {
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO,  usuario );
			String codigoValidacao = LicencaBC.getCodigoValidadeLicenca();
			if (codigoValidacao == null ) {
				licencaBC.validarLicenca();
				codigoValidacao = LicencaBC.getCodigoValidadeLicenca();
			}
			if (codigoValidacao.equals("")) {
				return getNextView();
			} else {
				licencaBC.autenticarAutomaticamente();
				codigoValidacao = LicencaBC.getCodigoValidadeLicenca();
				if (!codigoValidacao.equals("")) {

					facesContext.addMessage("licenca", new FacesMessage(licencaBC.getDescricaoErro(codigoValidacao)));

					return getPreviousView();
				} else {
					return getNextView();
				}
			}
		} else {
			facesContext.addMessage("logar", new FacesMessage(bundle.getString(ConstantesMensagem.MSG_ERRO_LOGIN_SENHA_INVALIDO)));
			return getCurrentView();
		}
	}
	
	public boolean temPermissao(String codigo) {
		if (FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO) != null) {
			ContextoUsuario contexto = (ContextoUsuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
			for(Perfil perfil : contexto.getUsuario().getListaPerfil()) {
				for (Funcionalidade funcionalidade : perfil.getListaFuncionalidade()) {
					if (funcionalidade.getCodigo().equals(codigo)) {
						return true;
					}
				}
				
			}
		}

		return false;
	}
	
	public void logaut(){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO, null);
	}
}